package ft.xpf.impl;

import ft.xpf.util.StringUtil;
import ft.xpf.util.XmlParseUtil;
import ft.xpf.util.JsonParseUtil;

import ft.xpf.util.ClipBoardUtil;

public class DeskXmlParseFormatBaseRunner
{
	/**
	 * 执行转换业务逻辑
	 */
	protected void startRun()
	{
		// 格式 XML / JSON
		// 方向 ToPretty / ToCompact
		// *方式 ManualControl / DragDrop* 已删除，在 Controller 层自行决定
		
		String a = getStrTxt1();
		String b = null;
		String type = null;
		String direction = null;
		direction = getFormatDirection();
		
		if(a!=null && a.length()>0)
		{
			type = guessType(a);
			if(type!=null && type.length()>0)
			{
				setFormatType(type);
				
				try
				{
					if(C._FORMAT_TYPE_XML.equals(type))
					{
						if(C._FORMAT_DIRECTION_PRETTY.equals(direction))
						{
							b = XmlParseUtil.xmlFormatPretty(a);
						}
						else if(C._FORMAT_DIRECTION_COMPACT.equals(direction))
						{
							b = XmlParseUtil.xmlFormatCompact(a);
						}
					}
					else if(C._FORMAT_TYPE_JSON.equals(type))
					{
						if(C._FORMAT_DIRECTION_PRETTY.equals(direction))
						{
							b = JsonParseUtil.jsonFormatPretty(a);
						}
						else if(C._FORMAT_DIRECTION_COMPACT.equals(direction))
						{
							b = JsonParseUtil.jsonFormatCompact(a);
						}
					}
				}
				catch(Exception e)
				{
					b = "有错误发生：\n" + e.getMessage();
				}
			}
			else
			{
				// 没能猜出是哪个 type （XML 还是 JSON）
				b = "未知的 type 类型";
			}
			
			// 结果（也有可能是报错文字信息）
			if(b!=null && b.length()>0)
			{
				setStrTxt2(b);
			}
		}
	}

	/**
	 * 取剪贴板字符串
	 * @return
	 */
	public String getStringFromClipBoard()
	{
		return ClipBoardUtil.getStrFromClip();
	}
	
	/**
	 * 将 str 字符串设置到剪贴板
	 * @param str
	 */
	public void setStringToClipboard(String str)
	{
		ClipBoardUtil.setStrToClip(str);
	}
	
	/**
	 * 根据第一个字符猜测类型<br />
	 * 如果有大括号，中括号，则认为是JSON，<br />
	 * 如果有小于号，则认为是XML。
	 * @param str
	 * @return
	 */
	public static String guessType(String str)
	{
		String ret = "";
		
		if(str!=null && str.length()>0)
		{
			char c1 = StringUtil.getFirstNonEmptyCharacter(str);
			
			if('{' == c1 || '[' == c1)
			{
				ret = C._FORMAT_TYPE_JSON;
			}
			else if('<' == c1)
			{
				ret = C._FORMAT_TYPE_XML;
			}
		}
		
		return ret;
	}
	
	/**
	 * 在调用前清除下列参数：str1/2 path1/2 type direction
	 */
	protected void clearVals()
	{
		_str_str1 = null;
		_str_str2 = null;
		_str_path1 = null;
		_str_path2 = null;
		_format_type = null;
		_format_direction = null;
	}
	
	private String _str_str1 = null;
	public String getStrTxt1()
	{
		return _str_str1;
	}
	protected void setStrTxt1(String txt1)
	{
		_str_str1 = txt1;
	}
	
	private String _str_str2 = null;
	public String getStrTxt2()
	{
		return _str_str2;
	}
	protected void setStrTxt2(String txt2)
	{
		_str_str2 = txt2;
	}
	
	private String _str_path1 = null;
	public String getStrPath1()
	{
		return _str_path1;
	}
	protected void setStrPath1(String path1)
	{
		_str_path1 = path1;
	}
	private String _str_path2 = null;
	public String getStrPath2()
	{
		return _str_path2;
	}
	protected void setStrPath2(String path2)
	{
		_str_path2 = path2;
	}
	private String _format_type = null;
	protected void setFormatType(String type)
	{
		_format_type = type;
	}
	public String getFormatType()
	{
		return _format_type;
	}
	private String _format_direction = null;
	protected void setFormatDirection(String direction)
	{
		_format_direction = direction;
	}
	public String getFormatDirection()
	{
		return _format_direction;
	}
}
